第八章练习题 |
您所在的位置:网站首页 › python核心编程 第二版 › 第八章练习题 |
第八章练习题
原创
juven_yan 2012-09-07 14:38:03 博主文章分类:Python ©著作权 文章标签 素数 阶乘 斐波那契 Python核心编程 练习题答案 文章分类 Python 后端开发 ©著作权归作者所有:来自51CTO博客作者juven_yan的原创作品,请联系作者获取转载授权,否则将追究法律责任 1. 条件语句. 请看下边代码: # statement A if x > 0: # statement B pass elif x 1: if num % count == 0: #print "largest factor of %d is %d" % (num,count) return False break count -= 1 else: # print num, "is prime" return True for eachNum in range(10,21): print isprime(eachNum) 5. 约数. 完成一个名为getfactors()的函数.它接受一个整型作为参数,返回它所有约数的 列表,包括1和它本身. def getfactors(number): factorList = [] for i in range(1, number + 1): if number % i == 0 and isprime(i): factorList.append(i) return factorList def getfactors(number): fList = [1,number] for i in range(1,number + 1): if number % 2 == 0: fList.append(2) number = number / 2 else: fList.append(number) break return fList 6. 素因子分解. 以刚才练习中的isprime()和getfactors()函数为基础编写一个函数,它接受 一个整型作为参数,返回该整型所有素数因子的列表.这个过程叫做求素因子分解,它输出 的所有因子之积应该是原来的数.注意列表里可能有重复的元素.例如输入20,返回结果应该 是[2,2,5]. #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author: def isprime(num): count = num / 2 while count > 1: if num % count == 0: #print "largest factor of %d is %d" % (num,count) return False break count -= 1 else: # print num, "is prime" return True def getfactors(number): fList = [1] for i in range(1,number + 1): if number % 2 == 0: fList.append(2) number = number / 2 else: fList.append(number) break return fList number = int(raw_input("Enter a number:")) if isprime(number): print "You Entered a prime..." else: print getfactors(number) 7. 完全数. 完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身.例如:6的约 数是1,2,3, 因为1+2+3=6,所以6被认为是一个完全数.编写一个名为isperfect()的函数,它 接受一个整型作为参数,如果这个数字是完全数,返回1;否则返回0. #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author: def getfactors(number): fList = [1] for i in range(1,number + 1): if number % 2 == 0: fList.append(2) number = number / 2 else: fList.append(number) break return fList def isperfect(number): if sum(getfactors(number)) == number: return 1 else: return 0 number = int(raw_input("Enter a number:")) print isperfect(number) 8. 阶乘. 一个数的阶乘被定义为从1到该数字所有数字的乘积. N的阶乘简写为N!. N! == factorial(N) == 1*2*3*...*(N-2)*(N-1)*N,所以, 4! == 1 * 2 * 3 * 4,写一个函数,指定N,返回N!的值. #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author: def isfactorial(number): return reduce(lambda x,y:x*y,range(1,number + 1)) number = int(raw_input("Enter a number:")) print isfactorial(number) 9. 斐波那契数列. 斐波那契数列形如1,1,2,3,5,8,13,21,等等. 也就是说,下一个值是序列 中前两个值之和. 写一个函数,给定N,返回第N个斐波那契数字.例如,第1个斐波那契数字 是1,第6个是8. #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author: def fibonacci(x): fibList = [1,1] for i in xrange(2,x+1): fibList.append(fibList[i-2] + fibList[i-1]) return fibList[-1] num = int(raw_input("Enter a numer:")) print fibonacci(num) 10. 文本处理. 统计一句话中的元音,辅音及单词(以空格分割)的个数.忽略元音和辅音的特 殊情况,如"h","y","qu"等. 附加题:编写处理这些特殊情况的代码. #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author: def f(sentence): vChar,vowel,word,consonant = "aeiou",0,0,0 for eChar in sentence: if eChar.isalpha(): if eChar in vChar: vowel += 1 else: consonant += 1 return (vowel,consonant,len([eWord for eWord in sentence.split()])) sentence = raw_input("Input a Sentence...\n") print "vowel: %d, consonant: %d, word: %d" % f(sentence) 11. 文本处理. 要求输入一个姓名列表,输入格式是"LastName,FirstName",即姓 逗号 名.编 写程序处理输入,如果用户输入错误,比如"FirstName LastName,",请纠正这些错误,并通 知用户.同时你还需要记录输入错误次数.当用户输入结束后,给列表排序,然后以"姓,名" 的顺序显示. 输入输出示例(你不需要完全按照这里的例子完成): %nametrack.py Enter total number of names:5 Please enter name0:Smith,Joe Please enter name1:Mary Wong >>Wrong format... should be Last,First. >>You have done this 1 time(s) already. Fixing input... Please enter name2:Hamilton,Gerald Please enter name3:Royce,Linda Please enter name4:Winston Salem >>Wrong format... should be Last,First. >>You have done this 2 time(s) already. Fixing input... The sorted list(by last name) is: Hamilton,Gerald Royce,Linda Salem,Winston Smith,Joe Wong,Mary -------------------------------------------------------------------- #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author : def checkName(): wCount,nList = 0,[] hDone = False while not hDone: banner = '''''Input names,"LastName,FirstName",and input a "." as End Of Input!''' try: eoi = raw_input(banner) except (EOFError,KeyboardInterrupt): eoi = "." if eoi != ".": name = eoi lf = name.split(',') if len(lf) == 2: if 0 not in [len(x) for x in lf]: ## "LastName,FirstName" 各自长度不能为空 nList.append(name) else: print "Wrong format... LastName,FirstName cann't be zero length." wCount += 1 print "You have done this %d time(s) already. Fixing input..." % wCount else: print "Wrong format... at least ',' between LastName,FirstName,Try again ?" continue if eoi == ".": print [name for name in sorted(nList)] hDone = True checkName() 12. (整型)位操作. 编写一个程序,用户给出起始和结束数字后给出一个下面这样的表格,分 别显示出两个数字间所有整型的十进制,二进制,八进制和十六进制表示.如果字符是可 打印的ASCII字符,也要把它打印出来,如果没有一个是可打印字符,就省略掉ASCII那一 栏的表头.请参考下面的输入输出格式: 输出示例1 ------------------------ 输入起始值:9 输入结束值:18 DEC BIN OCT HEX ----------------------------------------- 9 01001 11 9 10 01010 12 a 11 01011 13 b 12 01100 14 c 13 01101 15 d 14 01110 16 e 15 01111 17 f 16 10000 20 10 17 10001 21 11 18 10010 22 12 输出示例2 ------------------------ 输入起始值:26 输入结束值:41 DEC BIN OCT HEX ASCII ----------------------------------------------------- 26 011010 32 1a 27 011011 33 1b 28 011100 34 1c 29 011101 35 1d 30 011110 36 1e 31 011111 37 1f 32 100000 40 20 33 100001 41 21 ! 34 100010 42 22 " 35 100011 43 23 # 36 100100 44 24 $ 37 100101 45 25 % 38 100110 46 26 & 39 100111 47 27 ' 40 101000 50 28 ( 41 101001 51 29 ) --------------------------------------------------------------------------- #!/usr/bin/env python ## -*- coding: utf-8 -*- ## Author: def dec2bin(num): binList = [] while num > 1: binList.append(divmod(num,2)[1]) num = divmod(num,2)[0] else: binList.append(num) return ''.join([str(bit) for bit in reversed(binList)]) def main(f,t): print "%s\n输入起始值:%d\n输入结束值:%d" % ('-'*25,f,t) if t = 33: print "DEC BIN OCT HEX ASCII \n%s" % ('-'*50) for nu in xrange(f,t): print "%3s %15s %10s %10s %6c" % (nu,dec2bin(nu),oct(nu),hex(nu),nu) elif f 打赏 赞 收藏 评论 分享 举报上一篇:第七章练习题 下一篇:SuSe 10.1下安装supervisord进程管理工具 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |